package qc.module.qms.algorithm.NumericCalc.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import qc.common.core.enums.qms.QmsParamValueDataTypeEnum;
import qc.common.core.utils.DateUtil;

/**
 * QMS参数值工具
 *
 * @author QuCheng Tech
 * @since 2025/9/14
 */
public class QmsParamValueUtil {
    private static final Logger logger = LoggerFactory.getLogger(QmsParamValueUtil.class);

    /**
     * 获取有效的参数值对象，返回null表示无有效的参数值
     *
     * @param dataType 参数值数据类型
     * @param valueStr 参数值字符串
     * @return java.lang.Object
     * @author QuCheng Tech
     * @since 2025/9/14
     */
    public static Object getValidParamValue(QmsParamValueDataTypeEnum dataType, String valueStr) {
        if (StringUtils.isNotBlank(valueStr)) {
            switch (dataType) {
                case BOOL:
                    //先尝试直接转换为Boolean类型，再判断字符串内容是否为1、Y、T、True等表示true的值；默认返回false
                    //Boolean.parseBoolean()只判断字符串内容为true的情况，直接使用字符串相等判断
                    if (StringUtils.equalsIgnoreCase(valueStr, "1") || StringUtils.equalsIgnoreCase(valueStr, "Y")
                            || StringUtils.equalsIgnoreCase(valueStr, "yes") || StringUtils.equalsIgnoreCase(valueStr, "T")
                            || StringUtils.equalsIgnoreCase(valueStr, "true"))
                        return true;
                    return false;
                case INT:
                    //int型如果转换失败返回null，表示参数值无效
                    try {
                        return Integer.parseInt(valueStr);
                    } catch (NumberFormatException ex) {
                    }
                    break;
                case FLOAT:
                    //float型如果转换失败返回null，表示参数值无效
                    try {
                        return Double.parseDouble(valueStr);
                    } catch (NumberFormatException ex) {
                    }
                    break;
                case DATE:
                    return DateUtil.parseDate(valueStr);
                default://其他数据类型，数据类型为字符串或工作曲线，直接返回字符串
                    return valueStr;
            }
        }

        return null;
    }
}
